// 自定义 Promise 构造函数
function Promise(executor) {

  // 添加属性
  // 向实例身上 添加状态
  this.PromiseState = 'pending';
  // 向实例身上 添加值
  this.PromiseResult = null;


  // 存储实例 this
  // self _this that
  const _this = this

  // resolve 函数
  function resolve(data) {
    if(_this.PromiseState !== 'pending') return
    _this.PromiseState = 'fulfilled';
    _this.PromiseResult = data;
  }

  // reject 函数
  function reject(data) {
    if(_this.PromiseState !== 'pending') return
    _this.PromiseState = 'rejected';
    _this.PromiseResult = data;
  }


  try {
    // 同步调用 【执行器函数】
    executor(resolve, reject);
  }catch(e){
    // throw 抛出错误 调用 reject
    reject(e)
  }

}






// 向原型上添加 then 方法
Promise.prototype.then = function(onResult, onRejected) {

  // 判断 当前Promise实例的 状态
  if (this.PromiseState === 'fulfilled') {
    onResult(this.PromiseResult)
  }

  if (this.PromiseState === 'rejected') {
    onRejected(this.PromiseResult)
  }

}
